$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

3. Хистограми и боје

У овој лекцији ћеш научити:

  1. још један начин да премешташ ћелије унутар Џупитер радне свеске;
  2. како да приказујеш податке хистограмима; и
  3. како да приказујеш графиконе у разним бојама.

3.1. Још мало о Џупитер радној свесци

Већ смо неколико пута рекли да се Џупитер радна свеска састоји из низа ћелија, а свака ћелија може да садржи текст, математички израз или низ Пајтон наредби. Низ дугмића при врху стране ти омогућује да бараташ ћелијама Џупитер радне свеске на разне начине. До сада смо упознали

  • дугме Run које извршава ћелију,
  • дугме које личи на дискету помоћу кога можемо да снимимо радну свеску,
  • дугме са знаком + које додаје нову ћелију испод активне ћелије и
  • стрелице на горе и на доле које померају радну ћелију за једно место горе или доле.

Следећа три дугмета:

Još tri dugmeta

омогућују да се са ћелијама обављају стандардне операције које се на енглеском зову cut (исеци, дугме "маказе"), copy (ископирај, дугме "два листа папира") и paste (залепи, дугме "лист папира који се додаје на радну подлогу").

Ако желиш да преместиш неку ћелију:

  1. кликни на ту ћелију,
  2. кликни на дугме cut (дугме "маказе"),
  3. кликни на неко друго место у Џупитер радној свесци, и
  4. кликни на дугме paste (дугме "лист папира који се додаје на радну подлогу").

Ова операција се кратко зове cut/paste.

Ако желиш да ископираш неку ћелију:

  1. кликни на ту ћелију,
  2. кликни на дугме copy (дугме "два листа папира")
  3. кликни на неко друго место у Џупитер радној свесци, и
  4. кликни на дугме paste (дугме "лист папира који се додаје на радну подлогу").

Ова операција се кратко зове copy/paste.

3.2. Хистограми

У ситуацијама када података нема много згодно их је приказати низом стубића. Такви дијаграми се зову хистограми или стубичасти дијаграми (на енглеском bar charts).

Пошто ћемо опет цртати графиконе увешћемо прво библиотеку за цртање графикона и дати јој скраћено име:

In [1]:
import matplotlib.pyplot as plt

Да се подсетимо: библиотека нам је на располагању у овој радној свесци, али је за потребе неке друге радне свеске морамо поново увести (из те, друге, радне свеске).

Претпоставимо да је на полугодишту један ученик имао следеће оцене из наведених предмета:

Предмет Оцена
Математика 2
Српски 4
Ликовно 5
Историја 3
Физичко 5
Музичко 4
Техничко 5

Податке можемо представити помоћу две листе, овако:

In [2]:
predmeti = ["mat", "srp", "lik", "ist", "fiz", "muz", "tio"]
ocene    = [2,     4,     5,     3,     5,     4,     5    ]

Графички их можемо представити низовима стубића користећи функцију bar. Ова врста дијаграма се на енглеском зове bar chart (дијаграм са стубићима), а ми их зовемо хистограми:

In [3]:
plt.bar(predmeti, ocene)
plt.title("Ocene na polugodištu")
plt.show()
plt.close()

Уколико желиш да повећаш димензије графикона можеш користити функцију figure са параметром figuresize (енглеска реч figure значи "илустрација, приказ", док енглеска реч size значи "величина"):

In [4]:
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene)
plt.title("Ocene na polugodištu")
plt.show()
plt.close()

Библиотека за цртање додељује графикону боју како она сматра да треба. Ако нам се боја коју је библиотека одабрала не свиђа можемо опцијом color (енгл. "боја") променити боју.

In [5]:
plt.figure(figsize=(10,5))
plt.bar(predmeti, ocene, color="g")
plt.title("Ocene na polugodištu")
plt.show()
plt.close()

Дијаграм је сада исцртан зеленом бојом ("g" = green = зелено). Можемо користити следеће боје:

Слово Боја (енг) Боја (српски)
"b" blue плава
"g" green зелена
"r" red црвена
"c" cyan светло плава
"m" magenta роза
"y" yellow жута
"k" black црна
"w" white бела

3.3. Приказивање две групе података на истом дијаграму

Могуће је на истом графикону приказати две групе података. Ево примера.

"Нормална телесна температура" је заправо интервал температура који се мења са узрастом особе. Када се температура мери испод пазуха, нормална телесна температура је описана следећом табелом:

Узраст Температура ($^\circ$C)
0--2 године 34,7--37,3
3--10 година 35,9--36,7
11--65 година 35,2--36,9
преко 65 година 35,6--36,2

У наредној ћелији смо податке из ове табеле представили низовима:

In [6]:
starosneGrupe    = ["0-2", "3-10", "11-65", "65+"]
normalnaT_donja  = [34.7,  35.9,   35.2,    35.6]
normalnaT_gornja = [37.3,  36.7,   36.9,    36.2]

Приказаћемо ове податке на једном графикону тако што ћемо навести две bar наредбе.

In [7]:
plt.bar(starosneGrupe, normalnaT_gornja)
plt.bar(starosneGrupe, normalnaT_donja)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.show()
plt.close()

Функције xlabel и ylabel додају појашњења ознака на $x$-оси, односно на $y$-оси.

Овај дијаграм је нечитак јер су разлике између доње и горње границе нормалне телесне температуре релативно мале у односу на податке које приказујемо. Да би се боље видело о којим интервалима се ради можемо приказати само онај део дијаграма који се односи на величине од, рецимо, 34 степена Целзијуса то 39 степени Целзијуса користећи наредбу ylim ($y$-limits, што значи, "границе за $y$-осу").

In [8]:
plt.bar(starosneGrupe, normalnaT_gornja)
plt.bar(starosneGrupe, normalnaT_donja)
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.show()
plt.close()

Важно је напоменути да је редослед навођења bar наредби битан јер библиотека прво исцрта више стубиће, па преко њих ниже. Ако променимо редослед bar наредби добићемо дијаграм који не представља оно што желимо -- стубићи који представљају доње границе се не виде јер је преко њих нацртана друга група података:

In [9]:
plt.bar(starosneGrupe, normalnaT_donja)
plt.bar(starosneGrupe, normalnaT_gornja)
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.show()
plt.close()

Дакле, мора овим редом:

In [10]:
plt.bar(starosneGrupe, normalnaT_gornja)
plt.bar(starosneGrupe, normalnaT_donja)
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.show()
plt.close()

За некога ко је само бацио поглед на дијаграм и није пажљиво читао текст пре њега није сасвим јасно који подаци су представљени плавим, а који наранџастим стубићима. Зато се дијаграму може додати легенда којом се дају додатна објашњења.

Прво ћемо у обе bar команде додати још по један параметар облика label="објашњење" који укратко описује податке приказане на том делу дијаграма. Функција legend потом црта легенду на дијаграму.

In [11]:
plt.bar(starosneGrupe, normalnaT_gornja, label="gornja granica")
plt.bar(starosneGrupe, normalnaT_donja, label="donja granica")
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.legend()
plt.show()
plt.close()

3.4. Задаци

Задатак 1. Погледај следећи код па одговори на питања:

In [12]:
import matplotlib.pyplot as plt
plt.bar(starosneGrupe, normalnaT_gornja, label="gornja granica")
plt.bar(starosneGrupe, normalnaT_donja, label="donja granica")
plt.ylim(34,39)
plt.title("Normalna telesna temperatura po starosnim grupama")
plt.xlabel("Starosne grupe (godine)")
plt.ylabel("Temperatura (C)")
plt.legend()
plt.show()
plt.close()
  1. Чему служи функција bar?
  2. Како би изгледао графикон када би две функције bar замениле места у овом програму?
  3. Чему служи функција xlabel?
  4. Чему служе функције ylim и legend?
  5. Како би променио величину овог графикона (димензије правоугаоника у који је спакован графикон)?
  6. Како би променио боју стубића који показују горњу границу у жуту?

Следеће задатке реши у Џупитеру.

Задатак 2. Првих десет места на АТП листи на дан 21.7.2019. изгледа овако:

In [ ]:
teniseri = ["Đoković", "Nadal", "Federer", "Thiem", "Zverev", "Tsipras", "Nishikori", "Khachanov", "Fognini", "Medvedev"]
poeni    = [12415,      7945,    7460,      4595,   4325,     4045,       4040,        2890,        2785,      2625]

Прикажи хистограмом податке о АТП поенима првих десет тенисера на свету.

Задатак 3. Биолози су до данас описали око два милиона врста живих бића. Сва она су подељена у пет царстава. Њихов приближан број по царствима је дат следећом табелом:

Царство Број врста
Животиње 1.400.000
Биљке 290.000
Гљиве 100.000
Протисти 200.000
Монере 10.000

Прикажи ове податке хистограмом.

Задатак 4. У следећој табели су приказане највише и најниже температуре (у $^\circ$C) икада измерене на континентима:

Континент: Европа Азија Африка Северна Америка Јужна Америка Аустралија Антарктик
Највиша забележена темп: 48 54 55 56.7 48.9 50.7 19.8
Најнижа забележена темп: -58.1 -67.8 -23.9 -63 -32.8 -23 -89.2

Прикажи оба низа података хистограмима на истом графикону. Нека максималне температуре буду представљене црвеним стубићима, а минималне плавим. (Подаци су преузети са странице https://www.space.com/17816-earth-temperature.html)

Задатак 5.

(а) Пронађи на Интернету шта ради функција barh из библиотеке matplotlib.

(б) Ако у решењу претходног задатка уместо функције bar употребиш функцију barh на оба места какав ћеш графикон добити?

In [ ]:
 

Задатак 6*. Процењује се да је Кина на дан 1.7.2019. имала 1.420.062.022 становника, а Индија 1.368.737.513. Број становника у Кини се сваке године повећа за 0,35%, а у Индији за 1,08%. На истом дијаграму приказати линијским графиком очекивани број становника Кине и Индије у наредних десет година под претпоставком да се годишњи раст броја становника ни у једној од ове две државе неће мењати.

Након колико година ће Индија престићи Кину по броју становника? Како се то може уочити са графикона?

In [ ]: